﻿using System;
using System.Data;
using System.Globalization;
using System.Web.UI.WebControls;
using mojoPortal.Web;
using mojoPortal.Web.Framework;
using mojoPortal.Web.UI;
using eStore.Business;
using eStore.Helpers;
using Resources;

namespace eStore.UI
{

    public partial class AdminCartBrowserPage : mojoBasePage
    {
        private int pageId = -1;
        private int moduleId = -1;
        private string pageNumberParam;
        //private string sortParam;
        private int pageNumber = 1;
        private const int pageSize = 10;
        private int totalPages = 1;

        private Store store;
        protected Double timeOffset;
        protected TimeZoneInfo timeZone;
        protected CultureInfo currencyCulture = CultureInfo.CurrentCulture;
        protected string detailUrlFormat = string.Empty;
        private bool canEdit;

        protected void Page_Load(object sender, EventArgs e)
        {
            LoadParams();
            if (!canEdit)
            {
                SiteUtils.RedirectToAccessDeniedPage(this);
                return;
            }

            if (SiteUtils.SslIsAvailable()) SiteUtils.ForceSsl();

            LoadSettings();
            SetupCss();
            PopulateLabels();
            PopulateControls();

        }

        private void PopulateControls()
        {
            if (Page.IsPostBack) return;

            BindGrid();

        }

        private void BindGrid()
        {
            if (store == null) return;

            litHeading.Text = string.Format(CultureInfo.InvariantCulture,
                eStoreResources.CartBrowserHeadingFormatString,
                store.Name);

            using (IDataReader reader = Cart.GetPage(
                store.Guid,
                pageNumber,
                pageSize,
                out totalPages))
            {
                string pageUrl = SiteUtils.GetNavigationSiteRoot() + "/eStore/AdminCartBrowser.aspx"
                    + "?pageid=" + pageId.ToString(CultureInfo.InvariantCulture)
                    + "&amp;mid=" + moduleId.ToString(CultureInfo.InvariantCulture)
                    + "&amp;pagenumber" + moduleId.ToString(CultureInfo.InvariantCulture)
                    + "={0}";

                pgrCart.PageURLFormat = pageUrl;
                pgrCart.ShowFirstLast = true;
                pgrCart.CurrentIndex = pageNumber;
                pgrCart.PageSize = pageSize;
                pgrCart.PageCount = totalPages;
                pgrCart.Visible = (totalPages > 1);


                grdCart.DataSource = reader;
                grdCart.PageIndex = pageNumber;
                grdCart.PageSize = pageSize;
                grdCart.DataBind();
            }

        }

        void btnDelete_Click(object sender, EventArgs e)
        {
            int daysOld;
            int.TryParse(txtDaysOld.Text, out daysOld);
            DateTime olderThan = DateTime.UtcNow.AddDays(-daysOld);
            if (chkOnlyAnonymous.Checked)
            {
                Cart.DeleteAnonymousByStore(store.Guid, olderThan);
            }
            else
            {
                Cart.DeleteByStore(store.Guid, olderThan);
            }

            WebUtils.SetupRedirect(this, Request.RawUrl);

        }


        private void PopulateLabels()
        {
            Title = SiteUtils.FormatPageTitle(siteSettings, eStoreResources.BrowseCartsLink);

            lnkStoreMenu.Text = eStoreResources.StoreManagerHeading;
            lnkStoreMenu.NavigateUrl = SiteRoot + "/eStore/AdminDashboard.aspx?pageid="
                                       + pageId.ToString(CultureInfo.InvariantCulture)
                                       + "&mid=" + moduleId.ToString(CultureInfo.InvariantCulture);

            lnkCurrentPage.Text = eStoreResources.BrowseCartsLink;
            lnkCurrentPage.NavigateUrl = Request.Url.ToString();

            grdCart.Columns[0].HeaderText = eStoreResources.CartBrowserUserHeading;
            grdCart.Columns[1].HeaderText = eStoreResources.CartBrowserOrderTotalHeading;
            grdCart.Columns[2].HeaderText = eStoreResources.CartBrowserCreatedHeading;
            grdCart.Columns[3].HeaderText = eStoreResources.CartBrowserLastModifiedHeading;

            btnDelete.Text = eStoreResources.DeleteCartsButton;
            litDays.Text = eStoreResources.DaysLabel;
            chkOnlyAnonymous.Text = eStoreResources.CheckBoxAnonymousCarts;
            UIHelper.AddConfirmationDialog(btnDelete, eStoreResources.DeleteCartsWarning);

            if (Page.IsPostBack) return;
            txtDaysOld.Text = @"90";
            chkOnlyAnonymous.Checked = true;
        }

        private void LoadSettings()
        {
            if (CurrentPage.ContainsModule(moduleId))
                store = StoreHelper.GetStore();

            pageNumberParam = "pagenumber" + moduleId.ToString(CultureInfo.InvariantCulture);
            pageNumber = WebUtils.ParseInt32FromQueryString(pageNumberParam, 1);

            timeOffset = SiteUtils.GetUserTimeOffset();
            timeZone = SiteUtils.GetUserTimeZone();

            detailUrlFormat = SiteUtils.GetNavigationSiteRoot() + "/eStore/AdminCartDetail.aspx"
                + "?pageid=" + pageId.ToString(CultureInfo.InvariantCulture)
                + "&amp;mid=" + moduleId.ToString(CultureInfo.InvariantCulture)
                + "&cart={0}";

            if (store == null) { return; }

            //currencyCulture = ResourceHelper.GetCurrencyCulture(store.DefaultCurrency);
            currencyCulture = ResourceHelper.GetCurrencyCulture(siteSettings.GetCurrency().Code);

            //if ((store != null)&&(store.CurrencyFormatString.Length > 0)) 
            //    currencyFormat = store.CurrencyFormatString;

        }

        private void LoadParams()
        {
            pageId = WebUtils.ParseInt32FromQueryString("pageid", pageId);
            moduleId = WebUtils.ParseInt32FromQueryString("mid", moduleId);
            canEdit = UserCanEditModule(moduleId);

        }

        protected virtual void SetupCss()
        {
            // older skins have this
            if (Page.Master == null) return;
            StyleSheet stylesheet = (StyleSheet)Page.Master.FindControl("StyleSheet");
            if (stylesheet == null) return;
            if (stylesheet.FindControl("styleestore") != null) return;
            Literal cssLink = new Literal
                                  {
                                      ID = "styleestore",
                                      Text = @"<link href='"
                                             + SiteUtils.GetSkinBaseUrl()
                                             + @"styleestore.css' type='text/css' rel='stylesheet' media='screen' />"
                                  };

            stylesheet.Controls.Add(cssLink);
        }


        #region OnInit

        protected override void OnPreInit(EventArgs e)
        {
            AllowSkinOverride = true;
            base.OnPreInit(e);
        }

        override protected void OnInit(EventArgs e)
        {
            base.OnInit(e);
            Load += Page_Load;
            btnDelete.Click += btnDelete_Click;

            SuppressPageMenu();


        }



        #endregion
    }
}
